#include "ap3216c.h"

//初始化
uint8_t ap3216c_init(void)
{
		uint8_t data1 = 0X00;
		uint8_t data3[2] = {0};
		
		//数据准备
		data3[0]=0x00;//寄存器地址
		data3[1]=0x04;//写入的数据
		
		HAL_I2C_Master_Transmit(&hi2c1,address_w,data3,2,1000);//往寄存器地址是0x00的寄存器，写入值：0x04(软复位)
		HAL_Delay(50);  
		
		
		data3[1]=0x03;
		HAL_I2C_Master_Transmit(&hi2c1,address_w,data3,2,1000);//往寄存器地址是0x00的寄存器，写入值：0x03(激活三个传感器的功能)
    HAL_Delay(50);                        // 等待至少10ms的复位时间
		
		//当前的寄存器地址是0x00
		HAL_I2C_Master_Receive(&hi2c1,address_r,&data1,1,1000);//从0x00中读取数据，放在data1变量中
	//	printf("data1=%d",data1);	//打印读出的数据
		if(data1 == 3)
		{
			return 0;
		}
		else
		{
			return 1;
		}	
} 

void ap3216c_read_data(uint16_t *ir, uint16_t *ps, uint16_t *als)
{
    uint8_t buf[6];
    uint8_t i;

    // 循环读取AP3216C的6个字节数据（包括IR、PS和ALS的原始数据）
    for (i = 0; i < 6; i++)
    {
        buf[i] = ap3216c_read_one_byte(0X0A + i);  
    }

    // 解析IR传感器数据，检查数据有效性
    if (buf[0] & 0X80)  // IR_OF位为1，则数据无效
    {
        *ir = 0;
    }
    else 
    {
        *ir = ((uint16_t)buf[1] << 2) | (buf[0] & 0X03);  // 提取并组装有效IR数据
    }

    // 提取并组装有效ALS数据
    *als = ((uint16_t)buf[3] << 8) | buf[2];  

    // 解析PS传感器数据，检查数据有效性
    if (buf[4] & 0x40) 
    {
        *ps = 0;  // IR_OF位为1，则数据无效
    }
    else
    {
        *ps = ((uint16_t)(buf[5] & 0X3F) << 4) | (buf[4] & 0X0F);  // 提取并组装有效PS数据
    }
}
uint8_t ap3216c_read_one_byte(uint8_t reg)
{
		uint8_t res;
    //i2c_read2(reg);
	HAL_I2C_Master_Transmit(&hi2c1,address_w,&reg,1,100);
	HAL_Delay(10);
	HAL_I2C_Master_Receive(&hi2c1,address_r,&res,1,100);
	HAL_Delay(10);
    // 返回读取到的数据
    return res;
}
